Git Worktree
Gitリポジトリから複数の作業ディレクトリを作成し、異なるブランチで同時に作業できる機能。
仕組み
通常、1つのリポジトリには1つの作業ディレクトリ(working directory)しか存在しない。ブランチを切り替えるには git checkout や git switch を使うが、これは作業ディレクトリのファイルを書き換える操作である。
Git Worktreeは、同じリポジトリ(.git)を共有しながら、複数の作業ディレクトリを作成できる。各worktreeは異なるブランチにチェックアウトされ、完全に独立したファイル状態を持つ。
project/
├── .git/ # 共有されるリポジトリ
├── src/, package.json, ... # メインworktree(mainブランチ)
../project-feature-a/ # 追加worktree(feature-aブランチ)
├── .git → ../project/.git # シンボリックリンク
├── src/, package.json, ... # 独立したファイル状態
../project-feature-b/ # 追加worktree(feature-bブランチ)
├── .git → ../project/.git
├── src/, package.json, ...
基本的な使い方
# 新しいworktreeを作成(新規ブランチ)
git worktree add ../project-feature-a -b feature-a
# 既存ブランチでworktreeを作成
git worktree add ../project-hotfix hotfix/urgent-fix
# worktree一覧を表示
git worktree list
# worktreeを削除
git worktree remove ../project-feature-a
利点
- ブランチ切り替え不要: 別ディレクトリで同時作業
- ビルドキャッシュ保持: メインの作業ディレクトリを汚さない
- レビューが容易: PRレビュー用に別worktreeを用意
- 依存関係の分離: node_modules等を別々に管理
AIエージェントでの活用
Claude CodeなどのAIエージェントを使う際、複数の機能を並列開発できる。
# 並列作業用のworktreeを作成
git worktree add ../project-feature-a -b feature-a
git worktree add ../project-feature-b -b feature-b
# 別々のターミナルでClaude Codeを起動
cd ../project-feature-a && claude
cd ../project-feature-b && claude
各worktreeで独立したClaude Codeセッションを持つことで、異なる機能を同時に実装できる。
詳細はClaude CodeとGit Worktreeによる並列開発を参照。
注意点
- 同一ブランチの重複不可: 1つのブランチは1つのworktreeにしかチェックアウトできない
- メンテナンスが必要:
git worktree pruneで不要な参照を定期的に削除 - 設定ファイルのコピー:
.env等は手動コピーが必要(自動化ツールで解決可能) - 依存関係の再インストール:
node_modules等はworktreeごとに必要
関連
- Claude Code
- Git
- 並列開発